#pragma once

#include <map>
#include <list>
#include "boost/ptr_container/ptr_set.hpp"
#include "PointInfo.h"
#include "btBulletDynamicsCommon.h"
#include <iostream>

/// Przechowuje informacje o punktach znajdujacych sie w sasiedztwie przeszkody
class PointToRigidBodyHashTable
{
public:

	/// Konstruktor
	PointToRigidBodyHashTable(void)
	{
	}

	/// Destruktor
	~PointToRigidBodyHashTable(void)
	{
		hash.clear();
	}

	/** Dodaje punkt powiazany z dana przeszkoda
	* @param key Numer przeszkody.
	* @param value Punkt zwiazany z przeszkoda.
	*/
	inline void Insert(const int key, const PointInfo& value)
	{
		if(hash[key].findLinearSearch(value) == hash[key].size())
			hash[key].push_back(value);
	}

	/** Pobiera liste punktow zwiazanych z dana przeszkoda
	* @param key Numer przeszkody
	* @return Lista punktow.
	*/
	inline btAlignedObjectArray<PointInfo>& GetArray(const int key)
	{
		return hash[key];
	}

private:
	/// Mapa wiazaca przeszkody z punktami z ich otoczenia.
	std::map<int, btAlignedObjectArray<PointInfo>> hash;
};

